package org.jupiter.blog.service.service;

import org.jupiter.blog.api.common.TdesignTreeNode;
import org.jupiter.blog.api.dto.JupiterPermissionDTO;
import org.jupiter.blog.api.dto.JupiterPermissionTreeDTO;

import java.util.List;

public interface JupiterPermissionService {

	/**
	 * 创建权限
	 */
	void createPermission(JupiterPermissionDTO dto);

	/**
	 * 根据UUID获取权限
	 */
	JupiterPermissionDTO getById(String uuid);

	/**
	 * 更新权限
	 */
	void updatePermission(String uuid, JupiterPermissionDTO dto);

	/**
	 * 删除权限
	 */
	void deletePermission(String uuid);

	/**
	 * 恢复已删除的权限
	 */
	void restorePermission(String uuid);

	/**
	 * 分页查询权限列表
	 */
	List<JupiterPermissionDTO> getByPage(JupiterPermissionDTO queryDTO);

	/**
	 * 获取权限总数
	 */
	long getCount(JupiterPermissionDTO queryDTO);

	/**
	 * 获取所有权限
	 */
	List<JupiterPermissionDTO> getAll();

	/**
	 * 获取权限树
	 */
	List<TdesignTreeNode> getTree();

	/**
	 * 根据角色ID获取权限列表
	 */
	List<JupiterPermissionDTO> getByRoleId(String roleId);

	/**
	 * 检查权限编码是否存在
	 */
	boolean existsByCode(String code);

	/**
	 * 为权限分配URL资源
	 */
	void assignUrlsToPermission(String permissionUuid, List<String> urlResourceUuids);

	/**
	 * 获取权限关联的URL资源列表
	 */
	List<String> getPermissionUrlResources(String permissionUuid);

	/**
	 * 创建权限并分配URL资源
	 */
	void createPermissionWithUrls(JupiterPermissionDTO dto);
}
